package TCPMain;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView; // 导入 RecyclerView 类

import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; // 导入视图组类，作为视图的容器
import android.widget.ProgressBar;
import android.widget.TextView;

import com.example.tcp2504.R;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import TCPMain.utils.DataUtil;
import TCPMain.utils.DataUtilInterface;

public class TCPDownDataAdapter extends RecyclerView.Adapter<TCPDownDataAdapter.ViewHolder>{
    private List<String> mDataset=new ArrayList<>(100);//用于展示的数据
    private List<Integer> mDatasetProgress=new ArrayList<>(100);//用于展示的进度数据
    private Map<String, Integer> ProgressData;
    private JSONObject DownData;//包含文件下载的大小的数据
    //定义按钮接口
    private static OnItemClickListener stopListener;//停止下载的监听器
    private static OnItemClickListener delListener;//删除下载的监听器
    private static DataUtilInterface dataUtil=new DataUtil();//数据解析工具
    private static final String TAG = "TCPDownDataAdapter";

    /**
     * 构造函数
     * @param data: 包含文件下载大小的JSON数据
     */
    public TCPDownDataAdapter(String data) {
        try{
            DownData=new JSONObject(data);
            Log.d(TAG, "传入的JSON数据：" + DownData);
            Iterator<String> iterator = DownData.keys();
            while (iterator.hasNext()) {
                String key = iterator.next();
                Integer value = DownData.optInt(key);
                mDatasetProgress.add(value);
                mDataset.add(key);
            }
        }catch (Exception e){
            e.printStackTrace();
        }

    }

    /**
     * 定义按钮接口
     */
    private interface OnItemClickListener {
        void onItemClick(int position, String data);
    }

    /**
     * 外部类（调用类）使用该方法设置停止下载事件的处理逻辑
     * @param listener：OnItemClickListener 对象，用于定义列表项停止下载事件的回调方法
     */
    public void setstopListener(OnItemClickListener listener) {
        stopListener = listener;
    }

    /**
     * 外部类（调用类）使用该方法设置删除下载事件的处理逻辑
     * @param listener：OnItemClickListener 对象，用于定义列表项删除下载事件的回调方法
     */
    public void setdelListener(OnItemClickListener listener) {
        delListener = listener;
    }



    /**
     * 定义一个静态内部类 ViewHolder，继承自 RecyclerView.ViewHolder
     * 用于表示列表项的视图
     */
    public static class ViewHolder extends RecyclerView.ViewHolder{
        public TextView name;
        public TextView progress;
        public ViewHolder(View parent) {
            super(parent);
            name = parent.findViewById(R.id.file_name);
            progress = parent.findViewById(R.id.progress);

        }
    }

    /**
     *重写 onCreateViewHolder 方法，用于创建新的列表项视图
     */
    public TCPDownDataAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        // 使用 LayoutInflater 将 item_layout 布局文件实例化为一个 View 对象
        View v = inflater.inflate(R.layout.tcp_down_data_layout, parent, false);
        return new ViewHolder(v);
    }
    // TCPDownDataAdapter.java 添加数据更新方法
    public void updateData(String jsonData) {
        try {
            JSONObject newData = new JSONObject(jsonData);
            Log.d(TAG, "传入的JSON数据：" + newData);
            mDataset.clear();
            mDatasetProgress.clear();

            Iterator<String> keys = newData.keys();
            while (keys.hasNext()) {
                String key = keys.next();
                int value = newData.getInt(key);
                if(value==99){//如果文件下载完成，则跳过该文件
                    continue;
                }
                mDataset.add(key);
                mDatasetProgress.add(value);
                Log.d(TAG, "key: " + key + ", value: " + value);
            }
            notifyDataSetChanged(); // 触发UI更新
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
    /**
 * 重写 onBindViewHolder 方法，用于将数据绑定到列表项视图
 * @param holder ViewHolder，应更新以表示item 在数据集中的给定位置.
 * @param position The position of the item within the adapter's data set.
 */
    public void onBindViewHolder(TCPDownDataAdapter.ViewHolder holder, int position){
        // 获取当前 position 的数据，并将其设置到 ViewHolder 中的 TextView
        // 添加调试日志
        Log.d(TAG, "绑定数据 -> 位置: " + position
                + " 文件: " + mDataset.get(position)
                + " 进度: " + mDatasetProgress.get(position).toString()+"%");
        holder.name.setText(mDataset.get(position));
        holder.progress.setText(mDatasetProgress.get(position).toString()+"%");
    }

    /**
 * 重写 getItemCount 方法，返回数据集的大小
 * @return
 */
    public int getItemCount() {
        return mDataset.size(); // 返回 mDataset 数组的长度
    }

}
